Ok(())
}
+ pub fn preload(&mut self, id: &SourceId, source: Box<Source + 'cfg>) {
+ self.sources.insert(id, source);
+ self.source_ids.insert(id.clone(), (id.clone(), Kind::Locked));
+ }
+
pub fn add_sources(&mut self, ids: &[SourceId]) -> CargoResult<()> {
for id in ids.iter() {
try!(self.load(id, Kind::Locked));
for key in package.manifest().warnings().iter() {
try!(options.config.shell().warn(key))
}
- compile_pkg(&package, options)
+ compile_pkg(&package, Some(Box::new(source)), options)
}
pub fn compile_pkg<'a>(package: &Package,
+ source: Option<Box<Source + 'a>>,
options: &CompileOptions<'a>)
-> CargoResult<ops::Compilation<'a>> {
let CompileOptions { config, jobs, target, spec, features,
let (packages, resolve_with_overrides, sources) = {
let rustc_host = config.rustc_host().to_string();
let mut registry = PackageRegistry::new(config);
+ if let Some(source) = source {
+ registry.preload(package.package_id().source_id(), source);
+ } else {
+ try!(registry.add_sources(&[package.package_id().source_id()
+ .clone()]));
+ }
// First, resolve the package's *listed* dependencies, as well as
// downloading and updating all remotes and such.
let package = try!(source.root_package());
let mut registry = PackageRegistry::new(config);
+ registry.preload(package.package_id().source_id(), Box::new(source));
let resolve = try!(ops::resolve_pkg(&mut registry, &package));
let ids: Vec<PackageId> = resolve.iter().cloned().collect();
try!(source.update());
let package = try!(source.root_package());
let mut registry = PackageRegistry::new(config);
+ registry.preload(package.package_id().source_id(), Box::new(source));
let resolve = try!(ops::resolve_with_previous(&mut registry, &package,
Method::Everything,
None, None));
None => to_avoid.extend(previous_resolve.iter()),
}
+ registry.preload(package.package_id().source_id(), Box::new(source));
let resolve = try!(ops::resolve_with_previous(&mut registry,
&package,
Method::Everything,
let new_pkg = Package::new(new_manifest, &manifest_path, &new_src);
// Now that we've rewritten all our path dependencies, compile it!
- try!(ops::compile_pkg(&new_pkg, &ops::CompileOptions {
+ try!(ops::compile_pkg(&new_pkg, None, &ops::CompileOptions {
config: config,
jobs: None,
target: None,
previous: Option<&'a Resolve>,
to_avoid: Option<&HashSet<&'a PackageId>>)
-> CargoResult<Resolve> {
- let root = package.package_id().source_id().clone();
- try!(registry.add_sources(&[root]));
// Here we place an artificial limitation that all non-registry sources
// cannot be locked at more than one revision. This means that if a git
}
pub fn read_packages(&self) -> CargoResult<Vec<Package>> {
-
if self.updated {
Ok(self.packages.clone())
} else if self.id.is_path() && self.id.precise().is_some() {